package com.example.hospital.exception;


import com.example.hospital.util.ConsoleUtils;

import org.fusesource.jansi.Ansi;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

import java.sql.SQLException;
//全局异常处理器
@ControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 处理登录时异常
     * 通过使用 @ExceptionHandler 注解，
     * 可以轻松地管理 Spring 应用中的异常处理逻辑。这不仅有助于提高代码的可读性和维护性
     * @param ex
     */
    @ExceptionHandler(LoginException.class)
    public void handleLoginException(LoginException ex) {
        ConsoleUtils.printColored("发生 LoginException: " + ex.getMessage(), Ansi.Color.RED);
    }

    /**
     * 处理用户不存在的异常
     */
    @ExceptionHandler(UserServiceException.class)
    public void handleUserServiceException(UserServiceException ex) {
        ConsoleUtils.printColored("发生 UserServiceException: " + ex.getMessage(), Ansi.Color.RED);

    }

    /**
     * 处理部门不存在的异常
     */
    @ExceptionHandler(DepartmentServiceException.class)
    public void handleDepartmentServiceException(DepartmentServiceException ex) {
        ConsoleUtils.printColored("发生 DepartmentServiceException: " + ex.getMessage(), Ansi.Color.RED);

    }

    /**
     * 处理职位不存在的异常
     */
    @ExceptionHandler(PositionServiceException.class)
    public void handlePositionServiceException(PositionServiceException ex) {
        ConsoleUtils.printColored("发生 PositionServiceException: " + ex.getMessage(), Ansi.Color.RED);

    }

    /**
     * 处理日期错误的异常
     *
     */
    @ExceptionHandler(DateFormatErrorException.class)
    public void handleDateFormatErrorException(DateFormatErrorException ex) {
        ConsoleUtils.printColored("发生 DateFormatErrorException: " + ex.getMessage(), Ansi.Color.RED);
    }

    /**
     * 处理排班不存在的异常
     *
     */
    @ExceptionHandler(ScheduleServiceException.class)
    public void handleScheduleServiceException(ScheduleServiceException ex) {
        ConsoleUtils.printColored("发生 ScheduleServiceException: " + ex.getMessage(), Ansi.Color.RED);
    }


    /**
     * 处理其他未知异常
     */
    @ExceptionHandler(Exception.class)
    public void handleUnknownException(Exception ex) {
        ConsoleUtils.printColored("发生未知异常: " + ex.getMessage(), Ansi.Color.RED);
    }
}
